package com.woniuxueyuan.util;

import com.nimbusds.jose.*;
import com.nimbusds.jose.crypto.MACSigner;
import com.nimbusds.jose.crypto.MACVerifier;

import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;

public class JWTUtil {
    private static final String SECRETKEY="天王盖地虎，宝塔镇河妖";//密钥
    /**
     * 创建jwt
     */
    public  static String createJWT(Map userMap) throws JOSEException {
        /**
         * 1创建头部（加密方式，常量）
         */
        JWSHeader header=new JWSHeader.Builder(JWSAlgorithm.HS256)
                .type(JOSEObjectType.JWT).build();
        //2.创建载荷
        Payload payload=new Payload(userMap);
        //3.创建签名=加密（头部+载荷+密钥）
        JWSObject jwsObject = new JWSObject(header,payload);
//        String secretKey="天王盖地虎，宝塔镇河妖";//密钥
        MACSigner jwsSigner = new MACSigner(SECRETKEY);
        jwsObject.sign(jwsSigner);//加密方法

      return jwsObject.serialize();//使用序列化，->生成jwt字符串

    }
    /**
     * 解密
     */
    public static boolean verifyJWT(String jwt) throws ParseException, JOSEException {
        //可以使用反序列化把jwt字符串，变成jwt对象jwsObject
        JWSObject jwsObject= JWSObject.parse(jwt);//反序列化方法
        MACVerifier verifier = new MACVerifier(SECRETKEY);
        return jwsObject.verify(verifier) ; //解密方法
    }

    /**
     * 获取jwt中用户信息
     * @param jwt
     * @return
     */
    public static Map getJWTUserInfo(String jwt) throws ParseException {
        JWSObject jwsObject= JWSObject.parse(jwt);//反序列化方法
        return jwsObject.getPayload().toJSONObject();//得到载荷中的用户信息
    }
}
